/* Controlador para ventas
 Creado por Carlos Pastelin Morales 
 29/12/2014 */
package Controlador;

import Modelo.Producto;
import Modelo.Usuarios;
import Vistas.Interface;
import Modelo.Ventas;
import javax.swing.*;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class SrvVenta extends JFrame {
    /*Inicializamos las variables a utilizar */

    Ventas modelo = new Ventas();
    Producto modeloproducto = new Producto();
    Usuarios modelousuario = new Usuarios();
    private ResultSet rs;
    private Interface vista;

    public SrvVenta(Interface view) {//C.P.M Obtebemos la vista atravez de el constructor
        this.vista = view;
    }
    /*Metodo para realizar la venta*/

    public void RealizaVenta() {
        String existe = "", nombre = "", apellido = "";
        int e = 0;
        String ID = "", ticket = "", s = "", iduser = "", obtentotal = "", numnota = "";
        String pro[] = new String[100], p;
        int to[] = new int[100];
        float prec[] = new float[100];
        Object ex = null, precio = null;
        Object pros = null;
        float total;
        try {
            for (int i = 0; i < vista.Tlista.getRowCount(); i++) {//C.P.M recorremos la lista de la venta
                ex = vista.Tlista.getValueAt(i, 0);//C.P.M obtenemos la cantidad
                String xe = objectToString(ex);//C.P.M pasamos a string la cantidad
                pros = vista.Tlista.getValueAt(i, 1);//C.P.M obteneos el nombre de el producto
                pro[i] = objectToString(pros);//C.P.M pasamos a un vector el nombre 
                p = objectToString(vista.Tlista.getValueAt(i, 2));//C.P.M obtenemos el precio
                prec[i] = Float.parseFloat(p);//C.P.M lo pasamos a un vector en flotante
                to[i] = Integer.parseInt(xe);//C.P.M obtenemos el total
                rs = modeloproducto.selectprodu(pro[i]);//C.P.M mandamos a consultar el producto para obtener su id
                if (rs.next()) { //C.P.M preguntamos si podemos recorrer el vector
                    rs.beforeFirst();//esta regresa el puntero al inicio para no perder el 1er dato
                    while (rs.next()) {//C.P.M recorremos el resultado
                        ID = rs.getString(1);//C.P.M obtenemos el id del producto
                        existe = rs.getString(6);//C.P.M obtenemos su existencia
                    }
                    e = Integer.parseInt(existe);//C.P.M pasamos la existencia a entero
                    int t = e - to[i];//C.P.M calculamos la nueva existencia del producto restandole la cantidad de venta
                    modeloproducto.modificaexistencia(t, ID);//C.P.M mandamso a modificar la existencia del producto
                }
            }
            iduser = vista.jTID.getText(); //C.P.M obtenemos el id del producto
            obtentotal = vista.jTtotal.getText();//C.P.M obtenemos el total de la venta
            numnota = vista.jNumVenta.getText();//C.P.M obtenemos el numero de nota
            total = Float.parseFloat(obtentotal);//C.P.M pasamos a flotante el total
            rs = modelousuario.buscaiduser(iduser);//C.P.M mandamos a buscar el id del usuarip
            while (rs.next()) {//C.P.M recorremos el resultado
                nombre = rs.getString(2);//C.P.M obtenemos el nombre 
                apellido = rs.getString(3);//C.P.M el apellido
            }/*Obtenemos la cantidad de pago*/

            String efectivo = JOptionPane.showInputDialog(null, "Venta Realizada\nTotal a Cobrar: $" + obtentotal + "\nEfectivo Recibido: ");
            float efe = Float.parseFloat(efectivo);//C.P.M pasamos a flotante para su calculo
            float cambio = efe - total;//C.P.M calculamos el cambio
            modelo.registraventa(obtentotal, iduser, numnota);//C.P.M registramos la venta 
            for (int i = 0; i < vista.Tlista.getRowCount(); i++) {//C.P.M recorremos la tabla para ir registrando los producto de esa nota
                modelo.registraventa2(pro[i], prec[i], to[i], iduser, numnota);//C.P.M registramos los producto de la nota
            }
            JOptionPane.showMessageDialog(null, "Venta Realizada\n\nTotal a Cobrar: $" + obtentotal + "\nCambio: $" + cambio);//C.P.M le mostramos el cambio a dar
        } catch (SQLException Error) {
            JOptionPane.showMessageDialog(null, "Ocurrio un error al realizar la venta");
        }
    }
    /*Metodo para pasar objeto a string*/

    public String objectToString(Object o) {
        String st;
        st = (String) o;
        return st;
    }
}
